package sia.erp.venta_ruta;

import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import java.util.concurrent.ExecutionException;

import sia.erp.model.Articulo;
import android.app.Activity;
import android.database.DataSetObserver;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class OrdenCompraActivity extends Activity {

	Spinner clienteSpinner;
	Spinner bodegaSpinner;
	Spinner articuloSpinner;
	EditText fechaEntrega;
	EditText descripcion;
	EditText impuestos;
	EditText cantidad;
	EditText precioCompra;
	List<String> articulos;
	List<String> bodegas;
	List<String> clientes;
	List<String> filaDocumento;
	List<Integer> documentos;
	float total;
	float antesimpuesto;
	float impuesto;
	int cantidadLineas;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.orden_compra);
		clienteSpinner = (Spinner) findViewById(R.id.cliente_spinner);
		bodegaSpinner = (Spinner) findViewById(R.id.bodega_spinner);
		articuloSpinner = (Spinner) findViewById(R.id.articulo_spinner);
		fechaEntrega = (EditText) findViewById(R.id.fecha_entrega);
		descripcion = (EditText) findViewById(R.id.descripcion);
		impuestos = (EditText) findViewById(R.id.impuesto);
		cantidad = (EditText) findViewById(R.id.cantidad);
		precioCompra = (EditText) findViewById(R.id.precio);
		total = 0;
		cantidadLineas = 0;
		if(savedInstanceState == null){
			filaDocumento = new ArrayList<String>();
			documentos = new ArrayList<Integer>();
		}
		if(Utils.isConnected){
			try {
				articulos = toStringList(Utils.consultarInventarios(this));
				bodegas = Utils.consultar(this, 3);
				clientes = Utils.consultar(this, 6);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ExecutionException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}


		ArrayListSpinnerAdapter adapterCliente = new ArrayListSpinnerAdapter(clientes);
		ArrayListSpinnerAdapter adapterBodegas = new ArrayListSpinnerAdapter(bodegas);
		ArrayListSpinnerAdapter adapterArticulo = new ArrayListSpinnerAdapter(articulos);

		clienteSpinner.setAdapter(adapterCliente);
		bodegaSpinner.setAdapter(adapterBodegas);
		articuloSpinner.setAdapter(adapterArticulo);

	}

	public List<String> toStringList(List<Articulo> articulos){
		List<String> newArray = new ArrayList<String>();
		for(int i = 0; i < articulos.size(); i++)
			newArray.add(articulos.get(i).getNombre());
		return newArray;
	}

	public void agregar_linea(View view){
		String fila = articuloSpinner.getSelectedItem().toString()+';'+
				bodegaSpinner.getSelectedItem().toString()+';'+
				impuestos.getText().toString()+';'+
				cantidad.getText().toString()+';'+
				precioCompra.getText().toString()+';'+
				(Float.parseFloat(cantidad.getText().toString())*Float.parseFloat(precioCompra.getText().toString()));

		filaDocumento.add(fila);
		cantidadLineas++;
		impuestos.setText("");
		cantidad.setText("");
		precioCompra.setText("");
		Toast toast1 = Toast.makeText(getApplicationContext(),
				"Linea Agregada", Toast.LENGTH_SHORT);
		toast1.show();
	}

	public void crear_documento(View view){
		documentos.add(cantidadLineas);
		if(Utils.isConnected){

			for(int i = 0; i < documentos.size(); i++){
				String cliente = clienteSpinner.getSelectedItem().toString();
				String fecha = fechaEntrega.getText().toString();
				String descrip = descripcion.getText().toString();
				Float total = 0f;
				Float impuestos = 0f;
				for(int j = 0; j < documentos.get(0); j++){
					StringTokenizer tokenizer = new StringTokenizer(filaDocumento.get(j),";");
					tokenizer.nextToken(); tokenizer.nextToken();
					Float impuesto = Float.parseFloat(tokenizer.nextToken());
					tokenizer.nextToken(); tokenizer.nextToken();
					Float tot = Float.parseFloat(tokenizer.nextToken());
					total = total + tot;
					impuestos = impuestos + (impuesto*tot);
				}
				double _total = total;
				double _impuestos = impuestos;
				try {
					Utils.CrearDocumento(this, cliente, fecha, descrip, _total, _impuestos, (_total+_impuestos));
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (ExecutionException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}


				for(int j = 0; j < documentos.get(0); j++){
					try {
						Utils.AgregarFila(this, filaDocumento.get(0));
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (ExecutionException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					filaDocumento.remove(0);
				}
				documentos.remove(0);
			}
		}
		Toast toast1 = Toast.makeText(getApplicationContext(),
				"Documento Agregado	", Toast.LENGTH_SHORT);
		toast1.show();

	}

	@Override
	public void onSaveInstanceState(Bundle savedInstanceState) {
		super.onSaveInstanceState(savedInstanceState);
		savedInstanceState.putIntegerArrayList("documentos", (ArrayList<Integer>) documentos);
		savedInstanceState.putStringArrayList("filaDocumentos", (ArrayList<String>) filaDocumento);
		savedInstanceState.putStringArrayList("articulos", (ArrayList<String>) articulos);
		savedInstanceState.putStringArrayList("bodegas", (ArrayList<String>) bodegas);
		savedInstanceState.putStringArrayList("clientes", (ArrayList<String>) clientes);
	}

	@Override
	public void onRestoreInstanceState(Bundle savedInstanceState) {
		articulos = savedInstanceState.getStringArrayList("articulos");
		bodegas = savedInstanceState.getStringArrayList("bodegas");
		clientes = savedInstanceState.getStringArrayList("clientes");
		documentos = savedInstanceState.getIntegerArrayList("documentos");
		filaDocumento = savedInstanceState.getStringArrayList("filaDocumentos");
	}


	private class ArrayListSpinnerAdapter implements SpinnerAdapter {

		List<String> data;

		public ArrayListSpinnerAdapter(List<String> data){
			this.data = data;
		}

		@Override
		public int getCount() {
			return data.size();
		}

		@Override
		public Object getItem(int arg0) {
			return data.get(arg0);
		}

		@Override
		public long getItemId(int arg0) {
			return arg0;
		}

		@Override
		public int getItemViewType(int arg0) {
			return android.R.layout.simple_spinner_dropdown_item;
		}

		@Override
		public View getView(int arg0, View arg1, ViewGroup arg2) {
			TextView v = new TextView(getApplicationContext());
			v.setTextColor(Color.BLACK);
			v.setText(data.get(arg0));
			return v;
		}

		@Override
		public int getViewTypeCount() {
			return 1;
		}

		@Override
		public boolean hasStableIds() {
			// TODO Auto-generated method stub
			return false;
		}

		@Override
		public boolean isEmpty() {
			// TODO Auto-generated method stub
			return false;
		}

		@Override
		public void registerDataSetObserver(DataSetObserver arg0) {
			// TODO Auto-generated method stub

		}

		@Override
		public void unregisterDataSetObserver(DataSetObserver arg0) {
			// TODO Auto-generated method stub

		}

		@Override
		public View getDropDownView(int arg0, View arg1, ViewGroup arg2) {
			return this.getView(arg0, arg1, arg2);
		}

	}

}

